home *** CD-ROM | disk | FTP | other *** search
/ Cracking 1 / Cracking I..iso / Příklady / 3.Anti-Debugging / Detekce SoftICu / INT 1 / INT_1Dlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2002-07-11  |  4.1 KB  |  152 lines

  1. // INT_1Dlg.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "INT_1.h"
  6. #include "INT_1Dlg.h"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CINT_1Dlg dialog
  16.  
  17. CINT_1Dlg::CINT_1Dlg(CWnd* pParent /*=NULL*/)
  18.     : CDialog(CINT_1Dlg::IDD, pParent)
  19. {
  20.     //{{AFX_DATA_INIT(CINT_1Dlg)
  21.         // NOTE: the ClassWizard will add member initialization here
  22.     //}}AFX_DATA_INIT
  23.     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  24.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  25. }
  26.  
  27. void CINT_1Dlg::DoDataExchange(CDataExchange* pDX)
  28. {
  29.     CDialog::DoDataExchange(pDX);
  30.     //{{AFX_DATA_MAP(CINT_1Dlg)
  31.         // NOTE: the ClassWizard will add DDX and DDV calls here
  32.     //}}AFX_DATA_MAP
  33. }
  34.  
  35. BEGIN_MESSAGE_MAP(CINT_1Dlg, CDialog)
  36.     //{{AFX_MSG_MAP(CINT_1Dlg)
  37.     ON_WM_PAINT()
  38.     ON_WM_QUERYDRAGICON()
  39.     ON_BN_CLICKED(IDC_OK, OnOk)
  40.     //}}AFX_MSG_MAP
  41. END_MESSAGE_MAP()
  42.  
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CINT_1Dlg message handlers
  45.  
  46. BOOL CINT_1Dlg::OnInitDialog()
  47. {
  48.     CDialog::OnInitDialog();
  49.  
  50.     // Set the icon for this dialog.  The framework does this automatically
  51.     //  when the application's main window is not a dialog
  52.     SetIcon(m_hIcon, TRUE);            // Set big icon
  53.     SetIcon(m_hIcon, FALSE);        // Set small icon
  54.     
  55.     // TODO: Add extra initialization here
  56.     
  57.     return TRUE;  // return TRUE  unless you set the focus to a control
  58. }
  59.  
  60. // If you add a minimize button to your dialog, you will need the code below
  61. //  to draw the icon.  For MFC applications using the document/view model,
  62. //  this is automatically done for you by the framework.
  63.  
  64. void CINT_1Dlg::OnPaint() 
  65. {
  66.     if (IsIconic())
  67.     {
  68.         CPaintDC dc(this); // device context for painting
  69.  
  70.         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  71.  
  72.         // Center icon in client rectangle
  73.         int cxIcon = GetSystemMetrics(SM_CXICON);
  74.         int cyIcon = GetSystemMetrics(SM_CYICON);
  75.         CRect rect;
  76.         GetClientRect(&rect);
  77.         int x = (rect.Width() - cxIcon + 1) / 2;
  78.         int y = (rect.Height() - cyIcon + 1) / 2;
  79.  
  80.         // Draw the icon
  81.         dc.DrawIcon(x, y, m_hIcon);
  82.     }
  83.     else
  84.     {
  85.         CDialog::OnPaint();
  86.     }
  87. }
  88.  
  89. // The system calls this to obtain the cursor to display while the user drags
  90. //  the minimized window.
  91. HCURSOR CINT_1Dlg::OnQueryDragIcon()
  92. {
  93.     return (HCURSOR) m_hIcon;
  94. }
  95.  
  96. void CINT_1Dlg::OnOk() 
  97. {
  98.     __asm
  99.     {
  100.         mov ax,ds
  101.         test al,4  // o jak² operaΦnφ systΘm se jednß?  
  102.         jne Win9x  // skok = operaΦnφm systΘmem je Windows 9x/Me
  103.             
  104.         xor eax,eax  // EAX = 0
  105.         push offset MyHandler  // adresa handleru
  106.         push dword ptr fs:[eax]  // adresa p°edchozφho handleru
  107.         mov fs:[eax],esp  // instalace
  108.         INT 1
  109.         pop dword ptr fs:[0]  // obnovenφ p∙vodnφho handleru
  110.         add esp,4  // korekce zßsobnφku
  111.             
  112.         cmp eax,4  // byl SoftICE nalezen?
  113.         jz No_SoftICE  
  114.         jmp SoftICE
  115.             
  116. MyHandler:
  117.         mov edx,[esp+0Ch]  // CONTEXT
  118.         mov ecx,[esp+4]  // EXCEPTION_RECORD    
  119.         mov eax,80000004h  // EAX = Φφslo chyby STATUS_SINGLE_STEP, kterou 
  120.                            // INT 1 vyvolß pokud je SoftICE aktivnφ 
  121.         mov ecx,[ecx]  // ECX = Φφslo chyby, kterß prßv∞ vznikla
  122.         sub eax,ecx  // porovnßnφ hodnot EAX a ECX
  123.         je Ok  // pokud se Φφsla chyb shodujφ je SoftICE aktivnφ
  124.         sub ecx,0C0000005h  // pokud nenφ SoftICE aktivnφ, INT 1 vyvolß
  125.                             // chybu STATUS_ACCESS_VIOLATION(C0000005h)
  126.         je No_NTIce  // pokud se Φφsla chyb shodujφ, nenφ SoftICE aktivnφ
  127.         sub eax,eax  // doÜlo k jinΘ chyb∞, kterou tento handler nebude zpracovßvat
  128.         inc eax  // ExceptionContinueSearch
  129.         jmp Konec
  130.             
  131. No_NTIce:
  132.         add dword ptr[edx+0B8h],2  // opravenφ chyby p°eskoΦenφm chybnΘ instrukce
  133.         mov [edx+0B0h],4  // ulo₧φ do EAX hodnotu 4 - SoftICE nenalezen
  134.             
  135. Ok:
  136.         sub eax,eax  // ExceptionContinueExecution
  137.             
  138. Konec:
  139.         ret
  140.     }
  141. Win9x:
  142.     MessageBox("Tato metoda funguje pouze ve Windows NT/2000/XP",NULL,MB_OK);
  143.     return;
  144.         
  145. No_SoftICE:
  146.     MessageBox("SoftICE nenalezen",NULL,MB_OK);
  147.     return;
  148.         
  149. SoftICE:
  150.     MessageBox("SoftICE nalezen",NULL,MB_OK);        
  151. }
  152.